package com.zhiche.lisa.bms.service.invoice;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.zhiche.lisa.bms.dao.model.invoice.InvoiceApply;
import com.zhiche.lisa.bms.pojo.vo.invoice.InvoiceApplyAndAsseBillDetailVO;
import com.zhiche.lisa.bms.pojo.vo.invoice.InvoiceApplyExcelVO;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 申请开票主表 服务类
 * </p>
 *
 * @author liuanshun
 * @since 2018-09-27
 */
public interface InvoiceApplyService extends IService<InvoiceApply> {
    /**
     * 查询开票分页信息
     *
     * @param invoiceApplyPage
     * @return
     */
    Page<InvoiceApply> selectInvoiceApplyPage(Page<InvoiceApply> invoiceApplyPage);

    /**
     * 根据申请开票标识获取对应申请开票的详细信息
     *
     * @param invoiceApply
     * @return
     */
    InvoiceApply selectInvoiceApply(InvoiceApply invoiceApply);

    /**
     * 新增申请账单
     *
     * @param invoiceApply
     */
    void insertInvoiceApply(InvoiceApply invoiceApply);

    /**
     * 审核
     *
     * @param invoiceApplyId
     */
    void invoiceApplyExamine(Long invoiceApplyId);

    /**
     * 批量审核
     *
     * @param invoiceApplyIds
     */
    void invoiceApplyExamineList(Long[] invoiceApplyIds);

    /**
     * 弃审
     *
     * @param invoiceApplyId
     */
    void invoiceApplyDiscardedExamine(Long invoiceApplyId);

    /**
     * 批量弃审
     *
     * @param invoiceApplyIds
     */
    void invoiceApplyDiscardedExamineList(Long[] invoiceApplyIds);

    /**
     * 新增申请账单以及绑定详明
     *
     * @param invoiceApplyAndAsseBillDetailVO
     */
    void insertInvoiceApplyAndDetail(InvoiceApplyAndAsseBillDetailVO invoiceApplyAndAsseBillDetailVO);

    /**
     * 修改指定列信息
     *
     * @param newInvoiceApply
     */
    void updateInvoiceApplyAppointCloumn(InvoiceApply newInvoiceApply);

    /**
     * 根据指定申请单推送对应登记附件
     *
     * @param inParm
     */
    void invoiceApplyLicenseConfim(InvoiceApply inParm);

    /**
     * 无token根据开票申请id查询开票申请信息
     *
     * @param invoiceId
     * @return
     */
    InvoiceApply getInvoiceApplyByBmsInvoiceIdNoTenant(String invoiceId);

    /**
     * 取消开票通知
     *
     * @param invoiceApply
     */
    void cancleInvoiceApplyForBms(InvoiceApply invoiceApply);

    /**
     * 根据条件导出数据
     *
     * @param condition
     * @return
     */
    List<InvoiceApplyExcelVO> exportInvoiceApplyDataByCondition(Map<String, Object> condition);
}
